/*****************************************************************************/
/*                                                                           */
/*    Domino Operation System Driver Module                                  */
/*                                                                           */
/*    Copyright (C) 2007 Laszlo Arvai                                        */
/*                                                                           */
/*    ------------------------------------------------------------------     */
/*    drvRXGeneral - ATmega driver for genral serial protocol receivers      */
/*****************************************************************************/

///////////////////////////////////////////////////////////////////////////////
// Includes
#include <drvRXGeneral.h>
#include <avr/io.h>
#include <avr/interrupt.h>

///////////////////////////////////////////////////////////////////////////////
// Initialize
void drvRXGENInit(void)
{
	// enable INT0 for any change in the pin
	MCUCR |= _BV(ISC00);
	GICR |= _BV(INT0);

	// setup timer
	TIMSK = _BV(OCIE1A);
	TCCR1A = 0;
	TCCR1B = _BV(CS11);
}

///////////////////////////////////////////////////////////////////////////////
// Set time for timer callback
void drvRXGENSetTimerCallback( dosWord in_time )
{
	OCR1A = in_time;
}

///////////////////////////////////////////////////////////////////////////////
// Set time for timer callback
void drvRXGENAddTimerCallback( dosWord in_time )
{
	OCR1A = OCR1A + in_time;
}

///////////////////////////////////////////////////////////////////////////////
// Pin change interrupt
ISR(INT0_vect)
{
	drvRXGENPinChangedCallback( TCNT1 );
}

///////////////////////////////////////////////////////////////////////////////
// Compare match interrupt
ISR(TIMER1_COMPA_vect)
{
	drvRXGENTimerCallback();
}
